#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量为油猴脚本添加更新URL的工具
"""

import os
import re
import urllib.parse

def add_update_urls_to_script(file_path, base_url, author_name="YourName"):
    """
    为单个脚本文件添加@updateURL和@downloadURL

    Args:
        file_path: 脚本文件路径
        base_url: 仓库基础URL，例如：https://raw.githubusercontent.com/YourName/YourRepo/main
        author_name: 作者名称
    """
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()

        # 获取脚本文件名和相对路径
        filename = os.path.basename(file_path)
        current_dir = os.getcwd()

        # 对中文文件名进行URL编码
        encoded_filename = urllib.parse.quote(filename)

        # 直接从文件路径计算相对路径
        rel_path = os.path.relpath(file_path, current_dir)

        # 简单的路径处理 - 直接替换文件名
        url_path = rel_path.replace(filename, encoded_filename).replace('\\', '/')

        # 构建meta文件名
        dir_part = os.path.dirname(rel_path)
        if dir_part and dir_part != '.':
            # 在子目录中 - 使用目录名作为前缀
            dir_name = dir_part.replace('\\', '_').replace('/', '_')
            meta_filename = f"{dir_name}_{filename.replace('.user.js', '.json')}"
        else:
            # 在根目录中
            meta_filename = filename.replace('.user.js', '.json')

        # 构建完整的URL
        meta_path = f"meta/{meta_filename}"
        update_url = f"{base_url}/{meta_path}"
        download_url = f"{base_url}/{url_path}"

        # 检查并删除现有的更新URL和下载URL
        lines = content.split('\n')
        updated_lines = []
        for line in lines:
            if not (line.strip().startswith('// @updateURL') or line.strip().startswith('// @downloadURL')):
                updated_lines.append(line)

        content = '\n'.join(updated_lines)
        lines = content.split('\n')

        # 在@grant之后添加更新URL
        # 查找插入位置
        insert_index = -1

        for i, line in enumerate(lines):
            if line.strip().startswith('// @grant'):
                # 找到最后一个@grant行
                for j in range(i + 1, len(lines)):
                    if not lines[j].strip().startswith('// @grant'):
                        insert_index = j
                        break
                if insert_index == -1:
                    insert_index = i + 1
                break

        if insert_index == -1:
            print(f"❌ {filename} 未找到合适的插入位置")
            return False

        # 构建要插入的行
        update_lines = [
            f"// @updateURL    {update_url}",
            f"// @downloadURL  {download_url}"
        ]

        # 在指定位置插入更新URL
        lines.insert(insert_index, update_lines[0])
        lines.insert(insert_index + 1, update_lines[1])

        # 写回文件
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write('\n'.join(lines))

        print(f"✅ {filename} 更新URL添加成功")
        return True

    except Exception as e:
        print(f"❌ {filename} 处理失败: {str(e)}")
        return False

def batch_update_scripts(directory, base_url, file_pattern="*.user.js"):
    """
    批量处理目录中的所有脚本文件

    Args:
        directory: 目录路径
        base_url: 仓库基础URL
        file_pattern: 文件匹配模式
    """
    success_count = 0
    total_count = 0

    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith('.user.js'):
                file_path = os.path.join(root, file)
                total_count += 1

                # 获取相对路径用于构建URL
                rel_path = os.path.relpath(root, directory)
                if rel_path == '.':
                    current_base_url = base_url
                else:
                    current_base_url = f"{base_url}/{rel_path}"

                if add_update_urls_to_script(file_path, current_base_url):
                    success_count += 1

    print("\n📊 处理结果:")
    print(f"   总文件数: {total_count}")
    print(f"   成功处理: {success_count}")
    print(f"   跳过/失败: {total_count - success_count}")

if __name__ == "__main__":
    # 配置参数
    SCRIPT_DIR = "."  # 当前目录，也可以指定为其他路径
    BASE_URL = "https://update.bodahu.com/oil-monkey-plugin-warehouse"  # 个人服务器URL

    print("🔧 开始批量添加更新URL...")
    print(f"📁 处理目录: {SCRIPT_DIR}")
    print(f"🌐 基础URL: {BASE_URL}")
    print("-" * 50)

    batch_update_scripts(SCRIPT_DIR, BASE_URL)

    print("-" * 50)
    print("🎉 处理完成！")
    print("\n📝 接下来请:")
    print("1. 将脚本文件上传到对应的仓库")
    print("2. 更新BASE_URL中的仓库信息")
    print("3. 重新运行此脚本以生成正确的URL")
    print("4. 测试脚本的自动更新功能")
